/**
 * 这个是有序表,所以相同的元素一定是连续的
 * 算法思想：遇到的第一个元素做一个flag，如果后续的相同，那么就计数k++
 * 然后遇到的第一个不同的元素移动k个位置
 */

#include<stdbool.h>
#include<stdio.h>
typedef int ElementType;

#define MAX_LENGTH 100
typedef struct{
    ElementType data[MAX_LENGTH];
    int size;
} SqList;
/**
 * 这个是自己写的，借鉴了前两道题
 * 答案使用的是两个下标，一个一直遍历，一个用来赋值，而不是移动k
 * 答案中还有个问题，如果数组是无需的如何做？(使用hash)
 * 
 */
bool remove_same(SqList * l){
    if(l->size==0) return false;//如果无元素，直接返回
    int k=0;
    int flag=0;//不一定需要
    int pre=l->data[0];//记录第一个元素
    int i=0;
    for(i=1;i<l->size;i++){
        if(l->data[i]==pre){//如果元素相同，就k++
            k++;
        }else{//否则将元素往前移动k个位置
            l->data[i-k]=l->data[i];
        }
        pre=l->data[i];

    }
    l->size=k;
}

int main(void){
    SqList l;
    l.size=10;
    int temp[]={1,2,3,4,4,4,5,5,5,5,};
    for(int i=0;i<l.size;i++){
        l.data[i]=temp[i];
    }
    remove_same(&l);
    for(int i=0;i<l.size;i++){
        printf("%d ",l.data[i]);
    }
    return 0;
}